# JSX
Um recurso que já existia no Vue 2.x, agora podemos de uma forma mais complementada em utilizar o tão famoso JSX, onde instânciamos um defineComponent
e executamos o template dentro do próprio componente.
# Instalação
Execute o comando:
npm install @vue/babel-plugin-jsx -D
e no seu .babelrc na raíz do projeto:
{
"plugins": ["@vue/babel-plugin-jsx"]
}
- Também podemos utilizar o JSX com Typescript(TSX)
Exemplo básico:
import { defineComponent } from "vue";
export default defineComponent({
name: "App",
render() {
return (
<>
<router-view />
</>
)
}
});
Podemos utilizar diretamente pelo retorno do setup():
import { defineComponent } from "vue";
export default defineComponent({
name: "App",
setup() {
return () => (
<>
<router-view />
</>
)
}
});
# Diretivas e Modificadores
Podemos utilizar diretamente pelo retorno do setup():
import { ref, defineComponent } from "vue";
export default defineComponent({
name: "App",
setup() {
let show = ref(false);
const toggleBestGroup = () => show.value = !show.value;
return () => (
<>
<button onClick={toggleBestGroup}>Clique Aqui</button>
<span v-show={show}>Olá He4rt!</span>
</>
)
}
});
- Utilizando o V-Model:
import { ref, defineComponent } from "vue";
export default defineComponent({
name: "App",
setup() {
let text = ref("");
return () => (
<>
<input vModel={text} type="text"></input>
<span>{text}</span>
</>
)
}
});
# Usando Componentes
Não precisamos importar os componentes com components: {...}
, podendo utilizar diretamente:
import { ref, defineComponent } from "vue";
//...
const Header = defineComponent({...});
//...
const Content = defineComponent({...});
//...
export default defineComponent({
name: "App",
setup() {
return () => (
<>
<Header />
<Content />
</>
)
}
});